import time
from django.core.cache import cache

class SimpleRateLimiter:
    def __init__(self, key, max_requests=10, window_seconds=1):
        """
        初始化限流器
        :param key: 限流的标识符（如 API 路径 + 用户 ID）
        :param max_requests: 每个时间窗口允许的最大请求数
        :param window_seconds: 限流窗口的时间长度，单位：秒
        """
        self.key = key
        self.max_requests = max_requests
        self.window_seconds = window_seconds

    def is_allowed(self):
        """
        检查是否允许请求
        :return: 如果请求未超出限制，返回 True；否则返回 False
        """
        # 获取当前时间窗口
        current_time = int(time.time())

        # Redis 的 key 格式：限流器 key + 时间窗口
        window_key = f"{self.key}:{current_time // self.window_seconds}"

        # 使用 Redis 来递增请求计数
        current_count = cache.get(window_key, 0)

        if current_count >= self.max_requests:
            # 超过限流阈值，拒绝请求
            return False

        # 否则，允许请求并更新计数
        cache.set(window_key, current_count + 1, timeout=self.window_seconds)
        return True
